//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
// 
// You should have received a copy of the GNU Lesser General Public License
// along with this program.  If not, see http://www.gnu.org/licenses/.
// 

package phyintersimu.simulations;
import phyintersimu.*;

network Network
{
    parameters:
        int numHosts;
        double minSimuTimeSlot @unit(s);
        xml networkRequestsXML;
        xml networkHostInfoXML;
    submodules:
        hosts[numHosts]: Host 
        {
            parameters:
                hostMinSimuTimeSlot = minSimuTimeSlot;
                hostId = index;
                
        }
        generator: Generator {
            parameters:
                requestsXml = networkRequestsXML;
                generatorMinSimuTimeSlot = minSimuTimeSlot;
                
        }
        protocol: Protocol {
            parameters:
                protocolNumHosts = numHosts;
                hostInfoXML = networkHostInfoXML;
        }
        coordinator: Coordinator {
            parameters:
                coordinatorNumHosts = numHosts;
        }
        sink: Sink;
    connections allowunconnected:
        for i=0..numHosts - 1 {
            // port id should be equal to hostId
            hosts[i].coordinatorControlPort <--> coordinator.hostControlPorts++;
            hosts[i].protocolControlPort <--> protocol.hostControlPorts++;
            hosts[i].generatorDataIn <-- generator.hostDataOuts++;
            hosts[i].sinkDataOut --> sink.hostDataIns++;
            hosts[i].generatorControlPort <--> generator.hostControlPorts++;
        }
}
